// 引入模块------------------------
// 错误处理中间件（一般不用）
// var createError = require('http-errors');

var express = require('express');
var path = require('path');

// cookie中间件
var cookieParser = require('cookie-parser');

// 日志中间件（请求的历史记录）
// var logger = require('morgan');


//引入路由模块------------------ 
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

// 创建应用级别的服务器----------------
var app = express();


// view engine setup 设置模板引擎-----------
// 设置视图文件夹（views只是默认的 ）
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');


// 注册中间件-----------------
// app.use(logger('dev'));
// post传参中间件
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// cookie中间件
app.use(cookieParser());
// 开放静态资源中间件
app.use(express.static(path.join(__dirname, 'public')));

// 注册路由中间件------------
app.use('/', indexRouter);
app.use('/users', usersRouter);


// 404错误---------------
// catch 404 and forward to error handler
app.use(function (req, res, next) {
  // next(createError(404));


  res.render("err")


  /*  res.send({
     status:404,
     msg:"此路不通"
   }) */
});


// error handler 统一处理了逻辑错误-------------
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  // res.locals.message = err.message;
  // res.locals.error = req.app.get('env') === 'development' ? err : {};

  // // render the error page
  // res.status(err.status || 500);
  // res.render('error');


  res.send({
    status:500,
    msg:"服务器崩溃了，请稍后重试"
  })
});

module.exports = app;



// 为什么模块化app.js(和模块化路由的道理一样)
// 好管理
// 避免外界直接访问到app.js
// 增加了私密性，提高了安全性
// 避免了外界的滥用
// ./bin/www把端口单独拿出去了
// 启动项目：node  ./bin/www
